#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
int n,m;
char a[1550],c[1550],A[1550];
bool flag;
double ans=0,st;
struct ok{
    string s;
    int z;
}b[1550];
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-') f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
inline void dfs(int k){
    if(k==(n+1)){
        int d=1;
        int cnt=0;
        for(int i=1;i<=m;i++){
            for(int j=1;(j+(int)b[i].s.size()-1)<=n;j++){
                bool f=1;
                for(int g=0;g<(int)b[i].s.size();g++){
                    if(b[i].s[g]!=c[j+g]){
                        f=0;
                        break;
                    }
                }
                if(f){
                    cnt++;
                    d*=b[i].z;
                }
            }
        }
        double w=pow(d,1.0/(double)cnt);
        if(w>ans){
            ans=w;
            for(int i=1;i<=n;i++) A[i]=c[i];
        }
        if((((double)clock()-st)/1000.0)>=0.8) flag=1;
        if(flag) return;
        return;
    }
    if(a[k]=='.'){
        for(int i=0;i<=9;i++){
            c[k]=(char)(i+'0');
            dfs(k+1);
            if(flag) return;
        }
    }
    else{
        c[k]=a[k];
        dfs(k+1);
        if(flag) return;
    }
}
signed main(){
    freopen("magic.in","r",stdin);
    freopen("magic.out","w",stdout);
    st=clock();
    n=read(),m=read();
    scanf("%s",a+1);
    for(int i=1;i<=m;i++){
        cin>>b[i].s;
        b[i].z=read();
    }
    dfs(1);
    for(int i=1;i<=n;i++) cout<<A[i];
    return 0;
}